package com.domain.utils.wyyx;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.message.BasicNameValuePair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class IMSndmsg {

    private static Logger logger = LoggerFactory.getLogger(IMSndmsg.class);
    private static String APPKEY = "b170d1f8a89a04c9022e5066f05f73da";  //AppKey
    private static String SECRET = "9e4e2394f23e";  //AppSecret

    /**
     * 发送消息
     *
     * @param from 发送者accid
     * @param ope  0：点对点个人消息，1：群消息（高级群），其他返回414
     * @param to   ope==0是表示accid即用户id，ope==1表示tid即群id
     * @param type 0 表示文本消息,
     *             1 表示图片，
     *             2 表示语音，
     *             3 表示视频，
     *             4 表示地理位置信息，
     *             6 表示文件，
     *             100 自定义消息类型（特别注意，对于未对接易盾反垃圾功能的应用，该类型的消息不会提交反垃圾系统检测）
     * @param body 发送得内容最大长度5000字符，为一个JSON串
     * @return
     * @throws IOException
     */
    public static String sendMsg(String from, String ope, String to, String type, String body) throws IOException {
        String url = "https://api.netease.im/nimserver/msg/sendMsg.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("from", from));
        params.add(new BasicNameValuePair("ope", ope));
        params.add(new BasicNameValuePair("to", to));
        params.add(new BasicNameValuePair("type", type));
        String bodys = "{'msg':'" + body + "'}";
        params.add(new BasicNameValuePair("body", bodys));

        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    /**
     * 创建高级群
     *
     * @param tname        群名称，最大长度64字符
     * @param owner        群主用户帐号，最大长度32字符
     * @param members      ["aaa","bbb"](JSONArray对应的accid，如果解析出错会报414)，一次最多拉200个成员
     * @param announcement 群公告，最大长度1024字符
     * @param intro        群描述，最大长度512字符
     * @param msg          邀请发送的文字，最大长度150字符
     * @param magree       管理后台建群时，0不需要被邀请人同意加入群，1需要被邀请人同意才可以加入群。其它会返回414
     * @param joinmode     群建好后，sdk操作时，0不用验证，1需要验证,2不允许任何人加入。其它返回414
     * @param beinvitemode 被邀请人同意方式，0-需要同意(默认),1-不需要同意。其它返回414
     * @param invitemode   谁可以邀请他人入群，0-管理员(默认),1-所有人。其它返回414
     * @param uptinfomode  谁可以修改群资料，0-管理员(默认),1-所有人。其它返回414
     * @return
     * @throws IOException
     */
    public static String createTeam(String tname, String owner, String members, String announcement, String intro, String msg, String magree, String joinmode, String beinvitemode, String invitemode, String uptinfomode, String icon, String custom) throws IOException {
        String url = "https://api.netease.im/nimserver/team/create.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tname", tname));
        params.add(new BasicNameValuePair("owner", owner));
        params.add(new BasicNameValuePair("members", members));
        params.add(new BasicNameValuePair("announcement", announcement));
        params.add(new BasicNameValuePair("intro", intro));
        params.add(new BasicNameValuePair("msg", msg));
        params.add(new BasicNameValuePair("magree", magree));
        params.add(new BasicNameValuePair("joinmode", joinmode));
        params.add(new BasicNameValuePair("beinvitemode", beinvitemode));
        params.add(new BasicNameValuePair("invitemode", invitemode));
        params.add(new BasicNameValuePair("uptinfomode", uptinfomode));
        //创建群时额外的参数 json格式
        params.add(new BasicNameValuePair("custom", custom));
        params.add(new BasicNameValuePair("icon", icon));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    /**
     * 拉人入群
     *
     * @param tid     群唯一标识，创建群时会返回，最大长度128字符
     * @param owner   群主用户帐号，最大长度32字符
     * @param members ["aaa","bbb"](JSONArray对应的accid，如果解析出错会报414)，一次最多拉200个成员
     * @param magree  管理后台建群时，0不需要被邀请人同意加入群，1需要被邀请人同意才可以加入群。其它会返回414
     * @param msg     邀请发送的文字，最大长度150字符
     * @return
     * @throws IOException
     */
    public static String addTeam(String tid, String owner, String members, String magree, String msg) throws IOException {
        String url = "https://api.netease.im/nimserver/team/add.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("owner", owner));
        params.add(new BasicNameValuePair("members", members));
        params.add(new BasicNameValuePair("tid", tid));
        params.add(new BasicNameValuePair("msg", msg));
        params.add(new BasicNameValuePair("magree", magree));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    public static void main(String[] args) throws IOException {
        String res = queryDetailTeam("1573355811", "1");
        System.out.println(res);
    }


    /**
     * 踢人出群
     *
     * @param tid    群唯一标识，创建群时会返回，最大长度128字符
     * @param owner  群主的accid，用户帐号，最大长度32字符
     * @param member 被移除人的accid，用户账号，最大长度32字符;注：member或members任意提供一个，优先使用member参数
     * @return
     * @throws IOException
     */
    public static String kickTeam(String tid, String owner, String member) throws IOException {
        String url = "https://api.netease.im/nimserver/team/kick.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("owner", owner));
        params.add(new BasicNameValuePair("member", member));
        params.add(new BasicNameValuePair("tid", tid));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    /**
     * 查询指定群的详细信息（群信息+成员详细信息）
     *
     * @param tid 群id，群唯一标识，创建群时会返回
     *            1表示带上群成员列表，0表示不带群成员列表，只返回群信息
     * @return
     * @throws IOException
     */
    public static String queryDetailTeam(String tid, String ope) throws IOException {
        String url = "https://api.netease.im/nimserver/team/queryDetail.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tid", tid));
        params.add(new BasicNameValuePair("ope", ope));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
        //1570031576
    }






    /**
     * 修改消息提醒开关
     *
     * @param tid   群唯一标识，创建群时会返回
     * @param accid 要操作的群成员accid
     * @param ope   1：关闭消息提醒，2：打开消息提醒，其他值无效
     * @return
     * @throws IOException
     */
    public static String muteTeamTeam(String tid, String accid, String ope) throws IOException {
        String url = "https://api.netease.im/nimserver/team/muteTeam.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tid", tid));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    /**
     * 消息撤回
     *
     * @param deleteMsgid 要撤回消息的msgid
     * @param timetag     要撤回消息的创建时间
     * @param type        7:表示点对点消息撤回，8:表示群消息撤回，其它为参数错误
     * @param from        发消息的accid
     * @param to          如果点对点消息，为接收消息的accid,如果群消息，为对应群的tid
     * @return
     * @throws IOException
     */
    public static String recall(String deleteMsgid, String timetag, String type, String from, String to) throws IOException {
        String url = "https://api.netease.im/nimserver/msg/recall.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("deleteMsgid", deleteMsgid));
        params.add(new BasicNameValuePair("timetag", timetag));
        params.add(new BasicNameValuePair("type", type));
        params.add(new BasicNameValuePair("from", from));
        params.add(new BasicNameValuePair("to", to));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

}
